# ChioHub

*Tools for creating chat-bots.*

> История изменений проекта - `changelog.md`

Простой самописный набор инструментов для разработки чат ботов.
Нет никаких гарантий работоспособности :)

В проекте находится:

- Ядро обработки ввода-вывода.
- Система загрузки плагинов.
- Самописный движок для ВК.
- Множество плагинов.

почему вас НЕ стоит сюда смотреть:

- Много багов.
- Ещё больше кривого кода!
- Нету асинхронности!


## Установка

Первым делом спрочите себя, зачем вам это надо?

```sh
# клонируем
git clone https://notabug.org/milinuri/chioHub

# Создаём окружение
python -m venv venv

# Запускаем окружение
sourcew venv/bin/activate

# Зависимости
pip install -r requirements.txt
```


## Запуск

Запуск проходит из виртуального окружения.
Для запуска воспользуйстесь файлом `start.py`.

Или минимальный скрипт для запуска на движке ВК:

```py
from chiori import Chio, load_plugins
from backends.vk import VkGroup

app = Chio(VkGroup) # Cоздаём экземпляр чио
load_plugins(app) # Загружаем пакеты из "plugins/"
app.start() # запускаем движок
```

После первого запуска будет создан файл с настройками (`config.toml`), рабочие директории и файлы.
В файл `config.toml` вам будет нужно указать данные для авторизации движка, например:

```toml
[vk_backend]

# (str): id группы, без "-"
group_id = "202172365"

# (str): Токен группы (и пользователя по желанию)
token = "ТОКЕН ГРУППЫ"
user_token = "ТОКЕН ПОЛЬЗОВАТЕЛЯ"

# (str): ID Заблокированных чатов и администаров Чио
# Удобно управляется через plugins/vk-utils
banned_chats = []
admins = [ "628901097"]
```

## Написание плагинов

Функционал сборки Чио завист от установленных вами плагинов.
Плагинами называюься подпрограммы, описываюшие *команды* и *обработчики*.
Все плагины распологаются в директории `plugins/`.

Пример эхо-плагина.
```py
from chiori import Plugin

# Создаём новый плагин, обязательно указываем его имя.
p = Plugin("Эхо", desc="Отправляет вам ваши сообщения")

# Создаём новые команды /echo /эхо.
# Будет лучше, если вы укажите, что делает эта команда.
# В описании команды отвечайте на вопрос "что сделать?".
@p.command("эхо", usage="[text] Вернуть отравленный текст")
async def echo(event, ctx):

    # ctx.message, при отцуцтвии peer_id отправляет сообщение обратно.
    # В тексте сообщения возврашаем полученный от пользователя текст.
    await ctx.message(ctx.sargs)
```

*Тут могла быть нормальная документация...*


## To-do

Начался цикл полной переработки проекта до `Chiori v3`.
Список может дополнится.

- [x] `libs`: Первичное обновление библиотек.
- [ ] `Chiori`: Обновление кода ядра.
- [ ] `Chiori`: Применение патчей из прототипов `v3`.
- [ ] `Chiori`: Новая система плагинов.
- [ ] `Backend`: Создание абстрактного класса движка.
- [ ] `Backend`: Распределение функциональности движка.
- [ ] `Backend`: Обновление кода движков.
- [ ] `Chiori`: Новая система пользователей.
- [ ] `Libs`: Вторичное обновление библиотек.
- [ ] `Plugins`: Обновление плагинов.
- [ ] `Port`: Обновление плагинов старых версий.
- [ ] `Port`: Портирование сторонних плагинов.
- [ ] `Minigame`: Портирование маленького движка текстовой игры.